//配置axios的全局基本路径，访问后端接口使用8080
axios.defaults.baseURL='http://localhost:8080/';
//全局属性配置，在任意组件内可以使用this.$http获取axios对象
Vue.prototype.$http = axios



//=============axios的前置拦截器==========================
//作用：每次发送axios请求之前都要执行这个业务
axios.interceptors.request.use(config=>{
    //携带token
    let token = localStorage.getItem("token");
    if (token){
        //只要将token放到请求头，请求头的信息会随着axios请求发送到后端
        config.headers['token']=token;
    }
    return config;
},error => {
    Promise.reject(error);
})



//=============axios的后置拦截器==========================//
//作用：专门处理axios响应回来的数据。先于回调函数执行
axios.interceptors.response.use(res => {
    //后端响应的是没有登录的信息
    if (false === res.data.success && "noLogin" === res.data.msg) {
        //删除localStorage的token和logininfo
        localStorage.removeItem("token");
        localStorage.removeItem("logininfo");
        //跳转到登录页面
       location.href="login.html";
    }else if (false === res.data.success && "timeout" === res.data.msg) {
        alert("登录超时，请重新登录");
        //删除localStorage的token和logininfo
        localStorage.removeItem("token");
        localStorage.removeItem("logininfo");
        //跳转到登录页面
        location.href="login.html";
    }
    return res;
},error => {
    Promise.reject(error)
})

//========路由拦截器【拦截不到后端或不发送axios请求的请求】====================//
//思路：如果你访问的不是登录页面，并且也不是注册页面 -
var url = location.href;
if(url.indexOf("/login.html")==-1 && url.indexOf("/register.html")==-1
    && url.indexOf("/binder.html")==-1 && url.indexOf("/callback.html")==-1){
    //获取登录信息
    var logininfo = localStorage.getItem("logininfo");
    //如果没有就跑去登录
    if(!logininfo){
        location.href="/login.html";
    }
}


//封装公用方法 - 将字符串的参数解析为json对象
function parseUrlParams2Obj(url) {//xxx?code=xxx&state=1
    let paramStr = url.substring(url.indexOf("?")+1);//code=xxx&state=1
    let paramArr = paramStr.split("&");//[code=xxx,state=1]
    let paramObj = {};
    for(let i = 0;i<paramArr.length;i++){
        let paramTemp = paramArr[i];//code=xxx
        let paramName = paramTemp.split("=")[0];//code
        let paramValue= paramTemp.split("=")[1];//xxx
        paramObj[paramName] = paramValue;//{code:xxx,state:1}
    }
    return paramObj;
}